--- /dev/null
+unit select;\r
+\r
+interface\r
+\r
+uses\r
+ gnugettext, gnugettextDx,\r
+ Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,\r
+ StdCtrls, Buttons, ExtCtrls;\r
+\r
+type\r
+ TfrmSelect = class(TForm)\r
+ pnTop: TPanel;\r
+ pnBottom: TPanel;\r
+ lbSelect: TListBox;\r
+ btnOK: TBitBtn;\r
+ btnCancel: TBitBtn;\r
+ procedure FormCreate(Sender: TObject);\r
+ procedure FormShow(Sender: TObject);\r
+ private\r
+ { Private declarations }\r
+ public\r
+ { Public declarations }\r
+ end;\r
+\r
+var\r
+ frmSelect: TfrmSelect;\r
+\r
+function SelectFromStringList(const Title: string; List: TStrings; var Str: string): Boolean;\r
+function SelectLanguage(const Title: string; const Builtin: TStrings; var Lang: string; const Default: string = ''): Boolean;\r
+\r
+implementation\r
+\r
+{$R *.DFM}\r
+\r
+function SelectFromStringList(const Title: string; List: TStrings; var Str: string): Boolean;\r
+var\r
+ i, res: Integer;\r
+\r
+begin\r
+ Application.CreateForm(TfrmSelect, frmSelect);\r
+ try\r
+ frmSelect.Caption := Title;\r
+ frmSelect.lbSelect.Items.Assign(List);\r
+ frmSelect.ActiveControl := frmSelect.lbSelect;\r
+ if (str <> '') then\r
+ begin\r
+ i := frmSelect.lbSelect.Items.IndexOf(str);\r
+ if (i >= 0) then\r
+ frmSelect.lbSelect.ItemIndex := i;\r
+ end;\r
+ res := frmSelect.ShowModal;\r
+ Result := (res = mrOk);\r
+ i := frmSelect.lbSelect.ItemIndex;\r
+ if Result and (i >= 0) then\r
+ Str := frmSelect.lbSelect.Items[i];\r
+ finally\r
+ frmSelect.Release;\r
+ end;\r
+end;\r
+\r
+function SelectLanguage(const Title: string; const Builtin: TStrings; var Lang: string; const Default: string = ''): Boolean;\r
+var\r
+ i: Integer;\r
+ s, sx, sy: string;\r
+ l: TStrings;\r
+\r
+begin\r
+ Result := False;\r
+\r
+ if (Default = '') then\r
+ Lang := Copy(gnugettext.GetCurrentLanguage, 1, 2);\r
+\r
+ l := TStringList.Create;\r
+ try\r
+ sy := '';\r
+ for i := 0 to Builtin.Count - 1 do\r
+ begin\r
+ s := Builtin.Strings[i];\r
+ if (s = '') then Continue;\r
+\r
+ if (CompareText(s, 'de') = 0) then sx := 'German' else\r
+ if (CompareText(s, 'fr') = 0) then sx := 'French' else\r
+ if (CompareText(s, 'en') = 0) then sx := 'English' else\r
+ sx := '???';\r
+\r
+ sx := Format('%s - %s', [s, sx]);\r
+ if (CompareText(s, Lang) = 0) then sy := sx;\r
+\r
+ l.Add(sx);\r
+ end;\r
+\r
+ if SelectFromStringList(Title, l, sy) then\r
+ begin\r
+ Lang := Copy(sy, 1, 2);\r
+ Result := True;\r
+ end;\r
+\r
+ finally\r
+ l.Free;\r
+ end;\r
+end;\r
+\r
+{ TfrmSelect }\r
+\r
+procedure TfrmSelect.FormCreate(Sender: TObject);\r
+begin\r
+ TranslateComponent(Self);\r
+\r
+// !!! work-arround !!!\r
+ btnOK.Caption := dgettext('delphi', 'OK');\r
+ btnCancel.Caption := dgettext('delphi', 'Abort');\r
+// !!! work-arround !!!\r
+end;\r
+\r
+procedure TfrmSelect.FormShow(Sender: TObject);\r
+var\r
+ i: Integer;\r
+ s: string;\r
+ t: TLabel;\r
+begin\r
+ t := TLabel.Create(Self);\r
+ try\r
+\r
+ t.Caption := '';\r
+ t.Font := lbSelect.Font;\r
+ t.ParentFont := lbSelect.ParentFont;\r
+ t.Parent := lbSelect.Parent;\r
+\r
+ for i := 0 to lbSelect.Items.Count - 1 do\r
+ begin\r
+ s := Copy(lbSelect.Items[i], 1, 4);\r
+ while (t.Canvas.TextWidth(s) < 32) do\r
+ s := s + ' ';\r
+ s := s + Copy(lbSelect.Items[i], 5, 256);\r
+ lbSelect.Items[i] := s;\r
+ end;\r
+ \r
+ finally\r
+ t.Free;\r
+ end;\r
+end;\r
+\r
+end.\r